package negModel;

import java.io.IOException;
import java.util.Iterator;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.xml.sax.SAXException;

import org.apache.xerces.parsers.DOMParser;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.OutputFormat;

public class Taller {
	
	
	private ListaPartes listaPartesParaComprar;
		
	public Taller(ListaPartes lp){
		this.listaPartesParaComprar = lp;		
	}
	
	public Taller(Element xmlElement){
		this.listaPartesParaComprar = new ListaPartes();
		
		NodeList nodoslista=xmlElement.getElementsByTagName("ClistaParte");
		for(int nlv=0;nlv<nodoslista.getLength();nlv++){
			this.listaPartesParaComprar.RecuperarXml((Element)nodoslista.item(nlv));
			}
		
	}
	
	public Element toXml(Document doc) {
		Element xmlElement = doc.createElement("taller");
						
		xmlElement.appendChild(this.listaPartesParaComprar.toXml(doc,"C"));
		
		return xmlElement;
	}
	
	public static void guardar(String nombreArchivo,Taller taller ) throws IOException, ParserConfigurationException{
	    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
	    DocumentBuilder loader = factory.newDocumentBuilder();
        Document doc = loader.newDocument();

        
        doc.appendChild(taller.toXml(doc));
        
        XMLSerializer serializer = new XMLSerializer();
        
        OutputFormat outFormat = new OutputFormat();

       
        outFormat.setVersion("1.0");
        outFormat.setIndenting(true);
        outFormat.setIndent(4);
        
        serializer.setOutputFormat(outFormat);
        serializer.setOutputCharStream(
          new java.io.FileWriter(nombreArchivo));
        serializer.serialize(doc);
	}
	
	public static Taller cargar (String nombreArchivo) throws IOException, ClassNotFoundException{
		DOMParser parser = new DOMParser();

		try {
		    parser.parse(nombreArchivo);

		} catch (SAXException se) {
		    se.printStackTrace();
		} catch (IOException ioe) {
		    ioe.printStackTrace();
		}

		Document docXml = parser.getDocument();
		
		return new Taller(docXml.getDocumentElement());

	}
	
	public AlgoPesos evaluarCostoDeArregloTotal(Vehiculo v){
		AlgoPesos suma = new AlgoPesos(0);
		Iterator it = v.iterator();
		Parte p;
		while(it.hasNext()){
			p = (Parte)it.next();
			suma.agregarMonto(this.evaluarCostoDeArreglo(p).getMonto());
			
		}
		return suma;
	}
	
	public AlgoPesos evaluarCostoDeArreglo(Parte p){
		return p.getCostoDeArreglo();
	}
	
	public void arreglarPartes(Vehiculo v){
		Iterator it = v.iterator();
		Parte p;
		while(it.hasNext()){
			p = (Parte)it.next();
			this.arreglarParte(p);
		}	
	}
	
	public void arreglarParte(Parte parte){
		parte.arreglar();
	}
	
	public Parte ensamblarParte(Vehiculo v,Parte parte){
		Parte unaParte = v.agregarParte(parte);
		return unaParte;
	}
	
	public ListaPartes mostrarPartesParaComprar(){
		return listaPartesParaComprar;
	}
	
}
